#ifndef STRUCTS_H
#define STRUCTS_H

typedef struct menu_info{
  int   option;
  void* info1;
  void* info2;
  void* info3;
  void* info4;
  void* info5;
}menu_info;

typedef struct menu_labels{
  char label[100][PLIB_STR];
  char file[100][PLIB_STR];

  char ext[10][PLIB_STR];
  char F_stats[PLIB_STR];
  char F_stdout[PLIB_STR];
  char F_plot[PLIB_STR];

  char before_ini[PLIB_STR];
  char after_ini[PLIB_STR];

  char percent[PLIB_STR];
  char distrib[PLIB_STR];
  char xy[PLIB_STR];
  char xyz[PLIB_STR];
}menu_labels;

typedef int    (MENU_FN)  (menu_info* info);

typedef struct logFinfo {
  char* base;
  char* coords;
  char* F_graph;
  char* F_grid;
}logFinfo;

typedef struct logFctrl{
  menu_labels* labels;
  logFinfo*    info;

  char* F_stats;
  char* F_plot;
  char* plotstyle;
  char* part;
  int   multiple_win;
  int   nb_bars;

  int   plot_ext;
  int   et;
  int   x;
  int   x_stat;
  int   x_type;
  int   y;
  int   y_stat;
  int   y_type;
  int   z;
  int   z_stat;
  int   z_type;

  int   matching;
  int   group;
}logFctrl;

typedef int (DEFAULT_FN) (logFctrl* ctrl);

typedef struct data_item{
  int*    group;
  double* lvl;
  double* final;
}data_item;

typedef struct logFgroup{
  char* name;
  int   max_s;
  int   s;
  int*  list;
}logFgroup;

typedef struct logFdata{
  int max_i;
  int i;
  int max_m;
  int m;

  double***       lvl;
  double***       match;
  double**        final;
  int**           group;

  logFgroup*      group;
}logFdata;

#endif
